home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
LANG
/
C
/
LIB
/
PARI
/
PARI1
/
pari
/
a
/
version_A
Wrap
Text File
|
1992-01-03
|
5KB
|
205 lines
;Level zero kernel functions for PARI
; By C.T.Stretch Fri,03 Jan 1992
; Registers
a1=0
a2=1
a3=2
a4=3
v1=4
v2=5
v3=6
v4=7
v5=8
v6=9
sl=10
fp=11
ip=12
sp=13
lr=14
pc=15
; ADR macro
.MACRO ADR reg, label
.IF (label) >= $ + 8
ADD reg,pc,#(label)-$-8
.ELSE
SUB reg,pc,#$+8-(label)
.ENDIF
.ENDM
.EXTERN x$stack_overflow,x$udivide
.EXTERN pariputs
.AREA C$$data
overflow:: .LONG 0
hiremainder:: .LONG 0
printversion:: MOV ip,sp
STMFD sp!,{fp,ip,lr,pc}
SUB fp,ip,#4
CMPS sp,sl
BLLT x$stack_overflow
ADR a1,string
B pariputs
string: .ASCII " GP/PARI CALCULATOR Version 1.36\n"
.ASCIZ " (Archimedes version)\n"
.ALIGN
addll:: ADDS a1,a1,a2
MOVCC a2,#0
MOVCS a2,#1
STR a2,overflow
MOVS pc,lr
addllx:: LDR a3,overflow
MOVS a3,a3,LSR #1
ADCS a1,a1,a2
MOVCS a3,#1
STR a3,overflow
MOVS pc,lr
subll:: SUBS a1,a1,a2
MOVCC a2,#1
MOVCS a2,#0
STR a2,overflow
MOVS pc,lr
subllx:: LDR a3,overflow
RSBS a3,a3,#0
SBCS a1,a1,a2
MOVCC a3,#1
MOVCS a3,#0
STR a3,overflow
MOVS pc,lr
shiftl:: RSB a3,a2,#32
MOV a3,a1,LSR a3
STR a3,hiremainder
MOV a1,a1,ASL a2
MOVS pc,lr
shiftlr:: RSB a3,a2,#32
MOV a3,a1,ASL a3
STR a3,hiremainder
MOV a1,a1,LSR a2
MOVS pc,lr
bfffo:: MOV a2,#0
CMP a1,#1<<16
MOVLO a1,a1,LSL #16
ADDLO a2,a2,#16
CMP a1,#1<<24
MOVLO a1,a1,LSL #8
ADDLO a2,a2,#8
CMP a1,#1<<28
MOVLO a1,a1,LSL #4
ADDLO a2,a2,#4
CMP a1,#1<<30
MOVLO a1,a1,LSL #2
ADDLO a2,a2,#2
CMP a1,#1<<31
ADDLO a2,a2,#1
MOV a1,a2
MOVS pc,lr
mulll:: MOV ip,a1,LSR #16
MOV a4,a2,LSR #16
BIC a1,a1,ip,LSL #16
BIC a2,a2,a4,LSL #16
MUL a3,a1,a2
MUL a2,ip,a2
MUL a1,a4,a1
MUL a4,ip,a4
ADDS ip,a2,a1
ADDCS a4,a4,#1<<16
ADDS a1,a3,ip,LSL #16
ADC a4,a4,ip,LSR #16
STR a4,hiremainder
MOVS pc,lr
addmul:: MOV ip,a1,LSR #16
MOV a4,a2,LSR #16
BIC a1,a1,ip,LSL #16
BIC a2,a2,a4,LSL #16
MUL a3,a1,a2
MUL a2,ip,a2
MUL a1,a4,a1
MUL a4,ip,a4
ADDS ip,a2,a1
ADDCS a4,a4,#1<<16
ADDS a1,a3,ip,LSL #16
ADC a4,a4,ip,LSR #16
LDR ip,hiremainder
ADDS a1,a1,ip
ADDCS a4,a4,#1
STR a4,hiremainder
MOVS pc,lr
xl=a1
xu=a4
du=a2
dl=a3
q=v1
sumbit=ip
divll:: STMFD sp!, {v1}
LDR xu,hiremainder
MOV q,#0
MOV dl,#0
MOV sumbit,#1<<31
toploop: MOVS du,du,LSR #1
MOV dl,dl,RRX
CMP xu,du
CMPEQ xl,dl
BLO nosub
SUBS xl,xl,dl
SBC xu,xu,du
ADD q,q,sumbit
nosub: MOVS sumbit,sumbit,LSR #1
BNE toploop
STR xl,hiremainder
MOV a1,q
LDMFD sp!,{v1}
MOVS pc,lr
du2=a3
dl2=a2
mulmodll:: STMFD sp!, {v1,lr}
MOV ip,a1,LSR #16
MOV a4,a2,LSR #16
BIC a1,a1,ip,LSL #16
BIC a2,a2,a4,LSL #16
MUL v1,a1,a2
MUL a2,ip,a2
MUL a1,a4,a1
MUL a4,ip,a4
ADDS ip,a2,a1
ADDCS a4,a4,#1<<16
ADDS a1,v1,ip,LSL #16
ADC a4,a4,ip,LSR #16
MOV dl2,#0
MOV sumbit,#1<<31
toploop2: MOVS du2,du2,LSR #1
MOV dl2,dl2,RRX
CMP xu,du2
CMPEQ xl,dl2
BLO nosub2
SUBS xl,xl,dl2
SBC xu,xu,du2
nosub2: MOVS sumbit,sumbit,LSR #1
BNE toploop2
LDMFD sp!,{v1,pc}^